// moon: The build system and package manager for MoonBit.
// Copyright (C) 2024 International Digital Economy Academy
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program.  If not, see <https://www.gnu.org/licenses/>.
//
// For inquiries, you can contact us via e-mail at jichuruanjian@idea.edu.cn.

static PANIC_BUG_REPORT_MSG: &str = r"
         --  -- 
       /  //  / __--------_
      /  //  /_/            \
   ---      -                \ __
  / X        /        ____   /   )
  *_________/__/_____/______/ `--

`moon` has accidentally crashed. 

This is likely a bug in `moon`. We appreciate a bug report containing the panic
message and locations reported above, and what you have done to trigger it.
A backtrace generated by running with `RUST_BACKTRACE=1` would also be helpful.

Please report it at:
    https://github.com/moonbitlang/moon/issues/new?template=bug_report.md
";

/// Set up a hook when `moon` panics, to suggest reporting bugs.
pub fn setup_panic_hook() {
    let default_panic_hook = std::panic::take_hook();
    std::panic::set_hook(Box::new(move |info| {
        default_panic_hook(info);
        eprintln!("{}", PANIC_BUG_REPORT_MSG);
    }));
}
